package utna.frba.ia.tp.cases.descifrador.reglas.impl;

import utna.frba.ia.tp.cases.descifrador.reglas.definition.Funcion;

public class ReglaAdicional implements Funcion {

	int sumaMinima = 50;
	
	@Override
	public double valueOf(String key) {
		if(excedeLaSumaMinima(key))
			return 200;
		else
			return -80;
	}
	
	public String detalleOfValueOf(String key) {
		if(excedeLaSumaMinima(key))
			return "Los digitos del cromosoma suman mas del minimo establecido (mayor a 50), por lo tanto se premia con un valor de 200";
		else
			return "Los digitos del cromosoma suman menos del minimo establecido (menor a 50), por lo tanto se penaliza con un valor de 80";
	}

	private boolean excedeLaSumaMinima(String key) {
		int resultado = 0;
		for (int i = 0; i < key.length(); i++){
			int temporal = getNumeroFromChar(key, i);
			resultado = resultado + temporal;
		}
		return resultado >= sumaMinima;
	}

	private int getNumeroFromChar(String key, int i) {
		return Integer.parseInt(Character.toString(key.charAt(i)));
	}

	@Override
	public String getLiteralDefinition() {
		return "El conjunto de numeros del resultado debe sumar una cantidad mayor o igual a 50";
	}

}
